package com.zenithmind.task.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

/**
 * 任务管理配置类
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "task")
public class TaskConfig {

    /**
     * 文件配置
     */
    private FileConfig file = new FileConfig();

    /**
     * 任务配置
     */
    private TaskSettings task = new TaskSettings();

    /**
     * 通知配置
     */
    private NotificationConfig notification = new NotificationConfig();

    /**
     * 统计配置
     */
    private StatisticsConfig statistics = new StatisticsConfig();

    /**
     * 文件配置
     */
    @Data
    public static class FileConfig {
        /**
         * 文件上传路径
         */
        private String uploadPath = "/data/task-service/uploads/";

        /**
         * 最大文件大小
         */
        private String maxSize = "100MB";

        /**
         * 允许的文件类型
         */
        private String allowedTypes = "jpg,jpeg,png,gif,pdf,doc,docx,xls,xlsx,ppt,pptx,txt,zip,rar";
    }

    /**
     * 任务配置
     */
    @Data
    public static class TaskSettings {
        /**
         * 默认任务过期提醒时间（小时）
         */
        private Integer defaultReminderHours = 24;

        /**
         * 任务自动归档天数
         */
        private Integer autoArchiveDays = 90;

        /**
         * 最大子任务层级
         */
        private Integer maxSubtaskLevel = 5;

        /**
         * 任务标题最大长度
         */
        private Integer maxTitleLength = 200;

        /**
         * 任务描述最大长度
         */
        private Integer maxDescriptionLength = 5000;
    }

    /**
     * 通知配置
     */
    @Data
    public static class NotificationConfig {
        /**
         * 是否启用邮件通知
         */
        private Boolean emailEnabled = true;

        /**
         * 是否启用短信通知
         */
        private Boolean smsEnabled = false;

        /**
         * 是否启用微信通知
         */
        private Boolean wechatEnabled = false;

        /**
         * 批量通知最大数量
         */
        private Integer batchMaxSize = 100;
    }

    /**
     * 统计配置
     */
    @Data
    public static class StatisticsConfig {
        /**
         * 统计数据缓存时间（分钟）
         */
        private Integer cacheMinutes = 30;

        /**
         * 是否启用实时统计
         */
        private Boolean realtimeEnabled = true;
    }
}
